import dayjs from 'dayjs'

/**
 * 格式化时间
 * @param {string|Date} time 时间
 * @param {string} format 格式
 * @returns {string}
 */
export function formatTime(time, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!time) return '-'
  return dayjs(time).format(format)
}

/**
 * 格式化日期
 * @param {string|Date} date 日期
 * @returns {string}
 */
export function formatDate(date) {
  return formatTime(date, 'YYYY-MM-DD')
}

/**
 * 格式化文件大小
 * @param {number} size 文件大小（字节）
 * @returns {string}
 */
export function formatFileSize(size) {
  if (!size) return '0 B'
  
  const units = ['B', 'KB', 'MB', 'GB', 'TB']
  let index = 0
  
  while (size >= 1024 && index < units.length - 1) {
    size /= 1024
    index++
  }
  
  return `${size.toFixed(2)} ${units[index]}`
}

/**
 * 格式化数字
 * @param {number} num 数字
 * @param {number} decimals 小数位数
 * @returns {string}
 */
export function formatNumber(num, decimals = 2) {
  if (num === null || num === undefined) return '-'
  return Number(num).toFixed(decimals)
}

/**
 * 格式化百分比
 * @param {number} num 数字
 * @param {number} decimals 小数位数
 * @returns {string}
 */
export function formatPercent(num, decimals = 2) {
  if (num === null || num === undefined) return '-'
  return `${(Number(num) * 100).toFixed(decimals)}%`
}

/**
 * 格式化金额
 * @param {number} amount 金额
 * @param {string} currency 货币符号
 * @returns {string}
 */
export function formatMoney(amount, currency = '¥') {
  if (amount === null || amount === undefined) return '-'
  return `${currency}${Number(amount).toLocaleString()}`
}

/**
 * 格式化状态
 * @param {number} status 状态值
 * @param {Object} statusMap 状态映射
 * @returns {string}
 */
export function formatStatus(status, statusMap = { 1: '启用', 0: '禁用' }) {
  return statusMap[status] || '未知'
}

/**
 * 截断文本
 * @param {string} text 文本
 * @param {number} length 长度
 * @param {string} suffix 后缀
 * @returns {string}
 */
export function truncateText(text, length = 50, suffix = '...') {
  if (!text) return ''
  if (text.length <= length) return text
  return text.substring(0, length) + suffix
}

/**
 * 高亮关键词
 * @param {string} text 文本
 * @param {string} keyword 关键词
 * @returns {string}
 */
export function highlightKeyword(text, keyword) {
  if (!text || !keyword) return text
  const regex = new RegExp(`(${keyword})`, 'gi')
  return text.replace(regex, '<mark>$1</mark>')
}
